#include "mythread.h"
#include <QMessageBox>


QMutex mtx;

mythread1::mythread1(QObject *parent) : QThread(parent)
{
}


void mythread1::recvSelect()
{
    flag3 = true;
}

void mythread1::recvStr(QString str1)
{
    str = str1;
    //qDebug() << str;
    flag2 = true;
}

void mythread1::addToSqlite(QString& sqlStr)
{
    QSqlQuery sql;
    if(sql.exec(sqlStr) == false)
    {
        qDebug() << "插入sqlite数据库失败";
        return;
    }
    else
    {
        qDebug() << "插入sqlite数据库成功";
    }
}


void mythread1::opendatabase()
{
    //连接sqlite数据库
    database = QSqlDatabase::addDatabase("QSQLITE");
    database.setDatabaseName("test1.db");


    //测试是否正常打开
    if(database.open())
    {
       qDebug() << "sqlite数据库正常打开";
    }
    else
    {
        qDebug() << "sqlite数据库打开失败";
        return;
    }
}

void mythread1::run()
{
    mtx.lock();
    qDebug() << "-----" << QThread::currentThread() << "----";
    if(flag1 == false)
    {
        opendatabase();
        flag1 = true;
    }

    if(flag2)
    {
        addToSqlite(str);
        flag2 = false;
    }

    if(flag3)
    {
        select();
        flag3 = false;
        emit sendVector(vv);
    }

    QString dbName = QString::number((quint64)QThread::currentThreadId());
    flag1 = false;
    database.close();
    QSqlDatabase::removeDatabase(dbName);

    mtx.unlock();
}



void mythread1::select()
{
    vv.clear();
    QString str = QString("select * from user;");

    QSqlQuery sql;
    if(!sql.exec(str))
    {
        qDebug() << "查询失败";
        return;
    }
    else
    {
        while(sql.next())
        {
            QString str_1 = sql.value("id").toString();
            QString str_2 = sql.value("name").toString();
            QString str_3 = sql.value("passwd").toString();

            vv.push_back(str_1);
            vv.push_back(str_2);
            vv.push_back(str_3);
        }

        qDebug() << "查询成功";
    }
}

mythread2::mythread2(QObject *parent) : QThread(parent)
{
}

void mythread2::OpenMysql()
{
    database1 =QSqlDatabase::addDatabase("QODBC");
    database1.setHostName("127.0.0.1");
    database1.setPort(3306);
    database1.setDatabaseName("test2");
    database1.setUserName("root");
    database1.setPassword("123456789");


    if(database1.open())
    {
       qDebug() << "mysql数据库打开成功";
    }
    else
    {
        qDebug() << "mysql数据库打开失败";
        return;
    }
}


void mythread2::recvAdd(int id)
{
    flag2 = true;
    userid = id;
}

void mythread2::addMysql()
{
    qDebug() << "开始向数据库中添加";
    QSqlQuery sql;
    QString str = QString("insert into log (opr, userid) values ('%1', %2)").arg("新增").arg(userid);

    if(sql.exec(str))
    {
        qDebug() << "新增操作插入log表成功";
    }
    else
    {
        qDebug() << "新增操作插入log表失败";
    }
}


void mythread2::recvSelect(int id)
{
    flag3 = true;
    userid = id;
}


void mythread2::addMysqlSelect()
{
    QSqlQuery sql;
    QString str = QString("insert into log (opr, userid) values ('%1', %2)").arg("查询").arg(userid);

    if(sql.exec(str))
    {
        qDebug() << "查询操作插入log表成功";
    }
    else
    {
        qDebug() << "查询操作插入log表失败";
    }
}


void mythread2::run()
{
    mtx.lock();
    qDebug() << "-----" << QThread::currentThread() << "----";

    if(flag1)
    {
        OpenMysql();
        flag1 = false;
    }

    if(flag2)
    {
        addMysql();
        flag2 = false;
    }

    qDebug() << "!!!!";
    if(flag3)
    {
        addMysqlSelect(); //新增的查询操作
        flag3 = false;
    }

    if(flag4)
    {
        select();
        flag4 = false;

        emit SendVector(vv);
    }

    qDebug() << "!!!!";
    flag1 = true;
    database1.close();

    QString dbName = QString::number((quint64)QThread::currentThreadId());
    QSqlDatabase::removeDatabase(dbName);

    mtx.unlock();
}


void mythread2::select()
{
    vv.clear();
    QString str = QString("select * from log;");

    QSqlQuery sql;
    if(!sql.exec(str))
    {
        qDebug() << "查询失败";
        return;
    }
    else
    {
        while(sql.next())
        {
            QString str_1 = sql.value("id").toString();
            QString str_2 = sql.value("opr").toString();
            QString str_3 = sql.value("happentime").toString();
            QString str_4 = sql.value("userid").toString();

            vv.push_back(str_1);
            vv.push_back(str_2);
            vv.push_back(str_3);
            vv.push_back(str_4);
        }

        qDebug() << "查询成功";
    }

}


void mythread2::RecvAddSelect()
{
    flag4 = true;
}
